
local inputString = KEYS[2]

--actualKey：用户购买的出发站点和到达站点，如：出发站点_到达站点
local actualKey = inputString
local colonIndex = string.find(actualKey, ":")
if colonIndex ~= nil then
    actualKey = string.sub(actualKey, colonIndex + 1)
end

local jsonArrayStr = ARGV[1]
--jsonArray：需要扣减的座位类型以及对应数量，如：座位类型 - 数量
local jsonArray = cjson.decode(jsonArrayStr)

for index, jsonObj in ipairs(jsonArray) do
    local seatType = tonumber(jsonObj.seatType)
    local count = tonumber(jsonObj.count)
    --actualInnerHashKey：小key，格式，出发站点_到达站点_座位类型
    local actualInnerHashKey = actualKey .. "_" .. seatType
    --KEYS[1]：大key，格式，令牌容器前缀:列车id
    --获取两地之间的当前座位类型的余票数
    local ticketSeatAvailabilityTokenValue = tonumber(redis.call('hget', KEYS[1], tostring(actualInnerHashKey)))
    if ticketSeatAvailabilityTokenValue < count then
        --两地之间的当前座位类型的”余票不足“
        return 1
    end
end

--alongJsonArrayStr：需要扣减票数的路段，如：a地 到 b地
local alongJsonArrayStr = ARGV[2]
local alongJsonArray = cjson.decode(alongJsonArrayStr)

for index, jsonObj in ipairs(jsonArray) do --外层：座位类型 - 数量
    local seatType = tonumber(jsonObj.seatType)
    local count = tonumber(jsonObj.count)
    for indexTwo, alongJsonObj in ipairs(alongJsonArray) do --内层：a地 b地
        local startStation = tostring(alongJsonObj.startStation)
        local endStation = tostring(alongJsonObj.endStation)
        local actualInnerHashKey = startStation .. "_" .. endStation .. "_" .. seatType
        --扣减a地到b地当前座位类型的余票
        redis.call('hincrby', KEYS[1], tostring(actualInnerHashKey), -count)
    end
end

--扣减列车途径路段的座位数量完成
return 0
